package day01;

import java.util.Scanner;

/*
运算符：
    算术运算符：+ - * /(取上面) %(取余) ++（自加） --（自减）
    逻辑运算符：& &&(与) | ||(或) !(非)
    比较运算符：> < >= <= == !=   python中  18 < age < 35 正确，java不支持。
    赋值运算符：= += -= *= /= %=
    三元运算符： (条件表达式):(表达式1)?(表达式2)
    位运算：用得少，不讲。
 */
public class Demo04 {
    public static void main(String[] args) {
        int n = 10;
        int m = n++; //先把n赋值给m，n再自增1。先使用，再自增。
        System.out.println("n=" + n + ", m=" + m);

        // 等价于这段代码
        int n1 = 10;
        int m1 = n1;
        n1 = n1 + 1;
        System.out.println("n1=" + n1 + ", m1=" + m1);

        int x = 10;
        int y = ++x; // 先给x自增1，再赋值给y。先自增，再使用。
        System.out.println("x=" + x + ", y=" + y);

        // 等价于这段代码
        int x1 = 10;
        x1 = x1 + 1;
        int y1 = x1;
        System.out.println("x1=" + x1 + ", y1=" + y1);

        /*
        练习：创建一个类Demo041，里面添加一个main方法。实现如下功能：
        从键盘输入一个三位整数，比如输入234，计算各个位上数字之和。
        2+3+4=9，打印9。
         */
        int a = 234;
        int b = a / 100; // 2
        int s = a / 10 % 10; // 3   a % 100 / 10
        int g = a % 10; // 4

        int aa = 234 / 100;
        float bb = 234 / 100.0f;
        System.out.println(aa + " " + bb);

        /*
        逻辑与：两边都是true时，结果为true。&、&&（短路与）
               & 时，左右的表达式都会计算。
               && 时，左边能计算出来结果，右边就不执行了。
                      左边是false，不论右边是true还是false，整个的结果是false。
        逻辑或：一边是true时，结果为true。| ||(短路或)
               | 时，左右的表达式都会计算。
               || 时，左边能计算出来结果，右边就不执行了。
                      左边是true，不论右边是true还是false，整个的结果是true。
         */
        int num = 10;
        if (false & num++ > 0) {
            System.out.println("hello" + num);
        } else {
            System.out.println(num); // 11
        }

        num = 10;
        if (false && num++ > 0) { // 效率高，使用多。
            System.out.println("hello" + num);
        } else {
            System.out.println(num); // 10
        }
        // ctrl + alt + L 格式化代码

        num = 10;
        if (true | num++ > 0) {
            System.out.println("hello" + num);
        } else {
            System.out.println(num); // 11
        }

        num = 10;
        if (true || num++ > 0) { // 效率高，使用多。
            System.out.println("hello" + num);
        } else {
            System.out.println(num); // 10
        }

        // 三元运算符
        int c = 10;
        int d = 20;
        int max = (c > d) ? c : d;
        System.out.println("最大值：" + max);

        // 三元运算符都能改写成if-else，但是if-else不一定能改成三元运算符
        if (c > d) {
            max = c;
        } else {
            max = d;
        }
        System.out.println("最大值：" + max);

        // c d e 三个数，取最小值
        int e = 5;
        int min = (c < d) ? c : d;
        min = (min < e) ? min : e;
        System.out.println("最小值：" + min);
        // 三元运算符支持嵌套，将第二个里面的min换成三元表达式。
        min = (((c < d) ? c : d) < e) ? ((c < d) ? c : d) : e;
    }
}

class Demo041 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个三位整数：");
        int a = scanner.nextInt();
        int b = a / 100;
        int s = a / 10 % 10;
        int g = a % 10;
        System.out.println(b + s + g);

        System.out.println(5/3);
        System.out.println(5%3);
    }
}
